<HTML>
<HEAD>
  <!-- Created with AOLpress/2.0 -->
  <!-- AP: Created on: 1-Mar-2003 -->
  <!-- AP: Last modified: 13-Jan-2008 -->
  <TITLE>Viewing and Editing truetype instructions in FontForge.</TITLE>
  <LINK REL="icon" href="fftype16.png">
  <LINK REL="stylesheet" TYPE="text/css" HREF="FontForge.css">
</HEAD>
<BODY>
<DIV id="in">
  <TABLE ALIGN=RIGHT>
    <TR>
      <TD><IMG SRC="ttfinstrs-view.png" WIDTH="277" HEIGHT="280"><BR>
	<IMG SRC="ttfinstrs-edit.png" WIDTH="277" HEIGHT="280"></TD>
    </TR>
  </TABLE>
  <H1 ALIGN=Center>
    Viewing and Editing truetype instructions in FontForge.
  </H1>
  <UL>
    <LI>
      <A HREF="http://developer.apple.com/fonts/TTRefMan/RM03/Chap3.html">Apple's
      overview on instructing glyphs</A>
    <LI>
      <A HREF="http://developer.apple.com/fonts/TTRefMan/RM05/Chap5.html">Apple's
      list of truetype instructions</A>
    <LI>
      <A HREF="http://developer.apple.com/fonts/TTRefMan/RM04/Chap4.html">Apple's
      description of the truetype graphics state</A>
    <LI>
      <A HREF="http://developer.apple.com/fonts/TTRefMan/RM07/appendixA.html">Apple's
      summary of truetype instructions</A>
  </UL>
  <P>
  I shall not attempt to describe the mechanics of instructing truetype, if
  you want to understand it I refer you to the above links.
  (<A HREF="http://www.microsoft.com/typography/OTSPEC/ttinst.htm">Microsoft
  has a similar set </A>in but they are in word format).
  <P>
  This dialog shows the instructions associated with a glyph or truetype table
  (like fpgm or prep). If you move your mouse cursor over one of the instructions
  a brief help message will pop up describing that instruction. If you press
  the [Edit] button the dlg will change and you will be presented with a editable
  textarea containing the same instructions. You may modify these to your heart's
  content. Pressing the [Parse] will parse your modifications and (if they
  parse) return you to the "help" mode.
  <P>
  Instructions like MIRP may be entered either in FontForge's peculiar (but
  marginally more mnemonic) style: <CODE>MIRP[rnd,white] </CODE>or as
  <CODE>MIRP[00110]</CODE>, and <CODE>PUSHB_1</CODE> may be
  <CODE>PUSHB[000]</CODE>.
  <P>
  You may also include an stack arguments on the same line as the instruction
  and FontForge will convert them into the appropriate pushes. So...
  <BLOCKQUOTE>
    <PRE>5 SRP0
</PRE>
  </BLOCKQUOTE>
  <P>
  is equivalent to
  <BLOCKQUOTE>
    <PRE>PUSHB_1
5
SRP0
</PRE>
  </BLOCKQUOTE>
  <P>
  You may also use the expression <CODE>cvt(&lt;val&gt;)</CODE> instead of
  a number. This will be replaced by the index in the 'cvt ' table of an entry
  which is (within one em-unit of) &lt;val&gt;. So <CODE>cvt(100)</CODE> would
  return the index in 'cvt ' of 100. If there is no such entry, FontForge will
  create one.
  <P>
  When editing DELTA* instructions you might want to use the syntax:
  <BLOCKQUOTE>
    <PRE>PUSHB_3 6@12 8 1 DELTAP2
</PRE>
  </BLOCKQUOTE>
  <P>
  This means: Move point 8 by six delta-steps at 37 ppem (that's not clear
  at first glance - assuming delta_base is 9, DELTAP2 works from 25 ppem to
  25+15 ppem, in this example it's 25+12 ppem). So it's just a way of constructing
  an argument byte for DELTAP/C.
  <H2>
    <IMG SRC="editcvt.png" WIDTH="212" HEIGHT="376" ALIGN="Right">Editing the
    '<A NAME="cvt">cvt</A> ' table directly
  </H2>
  <P>
  This dialog shows the initial contents of the 'cvt ' table (before it has
  been modified by the 'prep' program). It is simply a list of signed 16bit
  values. You may change any value by clicking on it and typing a new value.
  You may also attach comments to entries, this can be helpful in reminding
  yourself what this index is used for. You may add new entries (at the end)
  with the [Change Length] button.
  <P>
  (You may also use the "<CODE>cvt(&lt;val&gt;)</CODE>" notation described
  above to add entries to the cvt table without using this dialog.)
</DIV>
</BODY></HTML>
